Voir le code pour croiser, préparer et nettoyer les données

Communes

# Charger les données depuis les fichiers CSV
df_siret <- read_csv2("data/siret.csv")
df_datagouv <- read_csv2("data/datagouv.csv")

# Fusionner les données sur l'identifiant 'siret'
result <- left_join(df_siret, df_datagouv, by = "siret")

# Corriger les codes postaux et codes insee
format_code <- function(code) {
  ifelse(!is.na(suppressWarnings(as.numeric(code))), sprintf("%05d", as.integer(code)), code)
}

result$`Code postal de l'établissement` <- sapply(result$`Code postal de l'établissement`, format_code)
result$`Code commune de l'établissement` <- sapply(result$`Code commune de l'établissement`, format_code)

# Filtrer les données pour garder seulement 'Commune et commune nouvelle'
filtered_result <- result %>%
  filter(`Nature juridique de l'unité légale` == "Commune et commune nouvelle")

# Séparer les communes non doublonées (une seule occurence de code insee)
communes_simples <- filtered_result %>%
  group_by(`Code commune de l'établissement`) %>%
  filter(n() == 1) %>%
  ungroup()

# Filtrer les communes en doublons en ne gardant que celles qui publient sur data.gouv.fr (metric.dataset >= 1)
communes_multiples_cleaned <- filtered_result %>%
  group_by(`Code commune de l'établissement`) %>%
  filter(n() > 1 & metric.datasets >= 1) %>%
  ungroup()

# Réintégration des communes non doublonées
result_final <- bind_rows(communes_simples, communes_multiples_cleaned)

# Sauvegarder le résultat dans un nouveau fichier CSV
write_csv(result_final, "data/enriched_siret.csv")

# Affichage du nombre de lignes après nettoyage
print(paste("Nombre de lignes après nettoyage :", nrow(result_final)))
## [1] "Nombre de lignes après nettoyage : 33012"
# Ajout des données population communale

donnees_communes <- read_csv2("data/donnees_communes.csv") %>%
  select(COM, PTOT)

communes <- left_join(result_final, donnees_communes, by = c("Code commune de l'établissement" = "COM"))

communes <- communes %>%
  rename(code_epci = `Code EPCI de l'établissement`)



# Sauvegarde du CSV
write_csv(communes, "data/communes.csv")
library(readr)
library(ggplot2)
library(dplyr)

# Charger le fichier de données
data <- read_csv("data/communes+siret+metrics+pop.csv")

# Nettoyage
data <- data %>%
  rename(
    unite_legale = `Dénomination de l'unité légale`,
    PTOT = PTOT,  
    metric.datasets = metric.datasets 
  )



# 50 communes les plus peuplées
top_50_communes <- data %>%
  arrange(desc(PTOT)) %>%  
  slice_head(n = 50)
# Visualisation

ggplot(top_50_communes, aes(x = reorder(unite_legale, PTOT), y = metric.datasets)) +
  geom_bar(stat = "identity", fill = "steelblue") +
  coord_flip() +
  theme_minimal() +
  labs(
    title = "Nombre de datasets des 50 communes les plus peuplées",
    x = "Commune",
    y = "datasets"
  ) +
  theme(
    axis.text.y = element_text(size = 4), 
    plot.title = element_text(hjust = 0.5)
  )

Récupération des EPCI

Traitements des données EPCI (attribution de l’EPCI pour chaque commune à partir du code EPCI et du SIRET, présent dans le même ensemble de données)

Voir le code
library(dplyr)

# Filtrer les données EPCI et supprimer les doublons
epci <- result %>%
  filter(`Nature juridique de l'unité légale` %in% c(
    "Communauté de communes",
    "Communauté d'agglomération",
    "Métropole",
    "Communauté urbaine"
  )) %>%
  rename(code_epci = `Code EPCI de l'établissement`) %>%
  distinct(code_epci, .keep_all = TRUE) %>% 
  mutate(code_epci = trimws(as.character(code_epci)))  

# Traitement et nettoyage

communes <- communes %>%
  mutate(code_epci = as.character(code_epci))

epci <- epci %>%
  mutate(code_epci = as.character(code_epci))

communes <- communes %>%
  mutate(code_epci = trimws(code_epci))

epci <- epci %>%
  mutate(code_epci = trimws(code_epci))

communes <- communes %>%
  filter(!is.na(code_epci))

# Jonction EPCI et communes

communes_epci <- communes %>%
  left_join(
    epci %>% select(code_epci, metric.datasets, metric.datasets.epci = metric.datasets), 
    by = "code_epci"
  )

# Ajout des informations EPCI

communes_epci <- communes_epci %>%
  mutate(
    epci_present = ifelse(!is.na(metric.datasets) & metric.datasets > 0, "oui", "non"),
    epci_datasets = ifelse(epci_present == "oui", metric.datasets, NA)
  ) %>%
  select(-metric.datasets)

write_csv(communes_epci, "data/communes_epci_brut.csv")

# Charge les données de géolocalisation
geoloc_data <- read_csv2("data/geoloc.csv", show_col_types = FALSE)

geoloc_data <- geoloc_data %>%
  rename(siret = `SIRET du siège de l'unité légale`)

geoloc_data <- geoloc_data %>%
  distinct(siret, .keep_all = TRUE)  

# Ajout des données de géolocalisation 
communes_epci_geoloc <- communes_epci %>%
  left_join(geoloc_data %>% select(siret, `Géolocalisation de l'établissement`), by = "siret")

write_csv(communes_epci_geoloc, "data/communes_epci_geoloc.csv")

Communes par région

Voir le code
# Librairies
library(dplyr)
library(ggplot2)
library(ggrepel)
library(scales)
library(plotly)


# Chargement et traitement des données
data <- read.csv("data/00-communes.csv")

data_clean <- data %>%
  filter(!is.na(region))

region_summary <- data_clean %>%
  group_by(region) %>%
  summarise(
    total_communes = n(),
    communes_with_datasets = sum(!is.na(datsets_commune) & datsets_commune >= 1, na.rm = TRUE)
  ) %>%
  mutate(percentage_with_datasets = (communes_with_datasets / total_communes) * 100) %>%
  arrange(desc(percentage_with_datasets))
# Histogramme
ggplot(region_summary, aes(x = reorder(region, percentage_with_datasets), y = percentage_with_datasets)) +
  geom_bar(stat = "identity", fill = "steelblue") +
  coord_flip() +
  labs(
    title = "Part des communes publiant au moins un jeu de données",
    x = "Région",
    y = "% des communes"
  ) +
  theme_minimal()

# Tableau
region_summary %>%
  arrange(desc(percentage_with_datasets)) %>%
  knitr::kable(col.names = c("Région", "Total Communes", "Communes avec jeux de données", "Pourcentage (%)"))
Région Total Communes Communes avec jeux de données Pourcentage (%)
La Réunion 19 3 15.7894737
Provence-Alpes-Côte d’Azur 886 53 5.9819413
Martinique 34 2 5.8823529
Guyane 19 1 5.2631579
Île-de-France 1186 59 4.9747049
Guadeloupe 27 1 3.7037037
Pays de la Loire 1060 35 3.3018868
Bretagne 1086 30 2.7624309
Auvergne-Rhône-Alpes 3789 55 1.4515703
Nouvelle-Aquitaine 4067 49 1.2048193
Centre-Val de Loire 1667 17 1.0197960
Hauts-de-France 3650 32 0.8767123
Corse 355 3 0.8450704
Normandie 2411 16 0.6636251
Bourgogne-Franche-Comté 3529 20 0.5667328
Occitanie 4301 21 0.4882585
Grand Est 4807 21 0.4368629
2 0 0.0000000
Mayotte 17 0 0.0000000
# Traitement des données pour obtenir le nombre total de jeux de données par région
region_summary_datasets <- data %>%
  filter(!is.na(region)) %>%
  group_by(region) %>%
  summarise(
    total_datasets = sum(datsets_commune, na.rm = TRUE)
  ) %>%
  arrange(desc(total_datasets))


# Créer l'histogramme basé sur le nombre total de jeux de données par région
ggplot(region_summary_datasets, aes(x = reorder(region, total_datasets), y = total_datasets)) +
  geom_bar(stat = "identity", fill = "steelblue") +
  coord_flip() +
  labs(
    title = "Total des jeux de données par région",
    x = "Région",
    y = "Nombre total de jeux de données"
  ) +
  theme_minimal()

# Population ajoutée

region_summary_ptot <- data %>%
  filter(!is.na(region) & !is.na(ptot)) %>%
  group_by(region) %>%
  summarise(
    total_population = sum(ptot, na.rm = TRUE),
    population_with_datasets = sum(ptot[datsets_commune >= 1], na.rm = TRUE), 
    total_datasets = sum(datsets_commune, na.rm = TRUE)
  ) %>%
  mutate(population_coverage_ratio = population_with_datasets / total_population) 

p <- ggplot(region_summary_ptot, aes(x = total_population, y = total_datasets, text = region, color = population_coverage_ratio)) +
  geom_point(size = 3) + 
  geom_smooth(method = "lm", se = FALSE, color = "black") + 
  scale_color_gradient(low = "lightblue", high = "darkblue", name = "Population couverte (%)") + 
  labs(
    title = "Population et nombre total de jeux de données par région",
    x = "Population totale (en millions)",
    y = "Nombre total de jeux de données"
  ) +
  theme_minimal()

interactive_plot <- ggplotly(p, tooltip = c("text", "population_coverage_ratio"))

interactive_plot

Communes par département

Voir le code
# Librairies
library(dplyr)
library(ggplot2)
library(ggrepel)
library(scales)
library(plotly)


# Chargement et traitement des données
data <- read.csv("data/00-communes.csv")

data_clean <- data %>%
  filter(!is.na(departement))

departement_summary <- data_clean %>%
  group_by(departement) %>%
  summarise(
    total_communes = n(),
    communes_with_datasets = sum(!is.na(datsets_commune) & datsets_commune >= 1, na.rm = TRUE)
  ) %>%
  mutate(percentage_with_datasets = (communes_with_datasets / total_communes) * 100) %>%
  arrange(desc(percentage_with_datasets))
library(knitr)
library(kableExtra)

# Styled and scrollable table
departement_summary %>%
  arrange(desc(percentage_with_datasets)) %>%
  kable(col.names = c("Département", "Total Communes", "Communes avec jeux de données", "Pourcentage (%)")) %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE) %>%
  scroll_box(width = "90%", height = "400px")
Département Total Communes Communes avec jeux de données Pourcentage (%)
Hauts-de-Seine 35 15 42.8571429
3 1 33.3333333
Seine-Saint-Denis 35 6 17.1428571
La Réunion 19 3 15.7894737
Hautes-Alpes 145 21 14.4827586
Val-de-Marne 39 5 12.8205128
Maine-et-Loire 140 12 8.5714286
Var 134 10 7.4626866
Bouches-du-Rhône 110 7 6.3636364
Martinique 34 2 5.8823529
Vendée 205 12 5.8536585
Guyane 19 1 5.2631579
Alpes-Maritimes 157 8 5.0955414
Ille-et-Vilaine 294 14 4.7619048
Morbihan 225 9 4.0000000
Isère 478 19 3.9748954
Loire-Atlantique 179 7 3.9106145
Guadeloupe 27 1 3.7037037
Val-d’Oise 171 6 3.5087719
Rhône 247 8 3.2388664
Yvelines 247 8 3.2388664
Charente-Maritime 438 14 3.1963470
Nord 612 18 2.9411765
Essonne 180 5 2.7777778
Vaucluse 147 4 2.7210884
Seine-et-Marne 478 13 2.7196653
Corse-du-Sud 122 3 2.4590164
Vienne 252 6 2.3809524
Haute-Savoie 263 6 2.2813688
Ain 363 8 2.2038567
Indre 233 5 2.1459227
Savoie 250 5 2.0000000
Hérault 326 6 1.8404908
Finistère 247 4 1.6194332
Gironde 508 8 1.5748031
Alpes-de-Haute-Provence 193 3 1.5544041
Deux-Sèvres 219 3 1.3698630
Landes 315 4 1.2698413
Oise 650 8 1.2307692
Loir-et-Cher 251 3 1.1952191
Seine-Maritime 678 8 1.1799410
Indre-et-Loire 258 3 1.1627907
Aveyron 271 3 1.1070111
Haute-Vienne 186 2 1.0752688
Vosges 487 5 1.0266940
Loire 308 3 0.9740260
Lot-et-Garonne 308 3 0.9740260
Doubs 516 5 0.9689922
Côtes-d’Armor 320 3 0.9375000
Sarthe 324 3 0.9259259
Côte-d’Or 676 6 0.8875740
Manche 380 3 0.7894737
Pyrénées-Atlantiques 528 4 0.7575758
Haute-Marne 406 3 0.7389163
Cher 272 2 0.7352941
Meurthe-et-Moselle 559 4 0.7155635
Haute-Garonne 572 4 0.6993007
Nièvre 303 2 0.6600660
Dordogne 466 3 0.6437768
Loiret 314 2 0.6369427
Bas-Rhin 473 3 0.6342495
Ardèche 316 2 0.6329114
Haut-Rhin 321 2 0.6230530
Charente 331 2 0.6042296
Gard 336 2 0.5952381
Eure-et-Loir 339 2 0.5899705
Drôme 345 2 0.5797101
Eure 538 3 0.5576208
Saône-et-Loire 548 3 0.5474453
Mayenne 212 1 0.4716981
Aude 425 2 0.4705882
Gers 453 2 0.4415011
Calvados 464 2 0.4310345
Meuse 486 2 0.4115226
Aisne 779 3 0.3851091
Haute-Saône 529 2 0.3780718
Pas-de-Calais 856 3 0.3504673
Tarn 305 1 0.3278689
Allier 308 1 0.3246753
Ariège 317 1 0.3154574
Moselle 666 2 0.3003003
Yonne 406 1 0.2463054
Puy-de-Dôme 440 1 0.2272727
Jura 455 1 0.2197802
Ardennes 429 0 0.0000000
Aube 410 0 0.0000000
Cantal 236 0 0.0000000
Corrèze 267 0 0.0000000
Creuse 249 0 0.0000000
Haute-Corse 233 0 0.0000000
Haute-Loire 235 0 0.0000000
Hautes-Pyrénées 458 0 0.0000000
Lot 297 0 0.0000000
Lozère 133 0 0.0000000
Marne 570 0 0.0000000
Mayotte 17 0 0.0000000
Orne 351 0 0.0000000
Pyrénées-Orientales 216 0 0.0000000
Somme 753 0 0.0000000
Tarn-et-Garonne 192 0 0.0000000
Territoire de Belfort 96 0 0.0000000
Voir le code
# Nombre total de jeux de données par département
departement_summary_datasets <- data %>%
  filter(!is.na(departement)) %>%
  group_by(departement) %>%
  summarise(
    total_datasets = sum(datsets_commune, na.rm = TRUE)
  ) %>%
  arrange(desc(total_datasets))

# Traitement des données pour obtenir le nombre total de jeux de données par département et la population totale
departement_summary_ptot <- data %>%
  filter(!is.na(region) & !is.na(ptot) & !is.na(departement)) %>%
  group_by(region, departement) %>%
  summarise(
    total_population = sum(ptot, na.rm = TRUE),
    total_datasets = sum(datsets_commune, na.rm = TRUE)
  )
# Nuage de points
departement_summary_ptot <- data %>%
  filter(!is.na(region) & !is.na(ptot) & !is.na(departement)) %>%
  group_by(region, departement) %>%
  summarise(
    total_population = sum(ptot, na.rm = TRUE),
    population_with_datasets = sum(ptot[datsets_commune >= 1], na.rm = TRUE), 
    total_datasets = sum(datsets_commune, na.rm = TRUE)
  ) %>%
  mutate(population_coverage_ratio = population_with_datasets / total_population) 

p <- ggplot(departement_summary_ptot, aes(x = total_population, y = total_datasets, text = departement, color = population_coverage_ratio)) +
  geom_point(size = 2) +  
  geom_smooth(method = "lm", se = FALSE, color = "black") + 
  scale_color_gradient(low = "lightblue", high = "darkblue", name = "Population couverte") + 
  labs(
    title = "Population couverte et jeux de données par département",
    x = "Population (en millions)",
    y = "Nombre de jeux de données"
  ) +
  theme_minimal()

interactive_plot <- ggplotly(p, tooltip = c("text", "population_coverage_ratio"))

interactive_plot

EPCI

Voir le code
# Libraries
library(dplyr)
library(readr)

# Charger les données
data <- read_csv("data/00-communes.csv")

# Création d'une table EPCI
epci_summary <- data %>%
  filter(!is.na(libelle_epci)) %>%
  group_by(libelle_epci) %>%
  summarise(
    nom_epci = first(libelle_epci),
    datasets_epci = max(datasets_epci, na.rm = TRUE),
    total_datasets_communes = sum(datsets_commune, na.rm = TRUE),
    communes_publiant = sum(datsets_commune >= 1, na.rm = TRUE),
    total_communes = n(),
    part_communes_publiant = 100 * (communes_publiant / total_communes),
    pop_couverte = 100 * (sum(ptot[datsets_commune >= 1], na.rm = TRUE) / sum(ptot, na.rm = TRUE)),
    pop_totale_epci = sum(ptot, na.rm = TRUE),
    pop_communes_publiant = sum(ptot[datsets_commune >= 1], na.rm = TRUE)
  )

write_csv(epci_summary, "data/epci_summary.csv")
# Libraries
library(dplyr)
library(plotly)
library(knitr)
library(kableExtra)

# Filtre sur les 100 EPCI les plus peuplés
epci_top_100 <- epci_summary %>%
  arrange(desc(pop_totale_epci)) %>%
  slice_head(n = 100)

max_size <- max(sqrt(epci_top_100$total_datasets_communes))
sizeref <- 2.0 * max_size / 30

# Nuage de points
plot <- plot_ly(
  epci_top_100,
  x = ~pop_totale_epci,
  y = ~pop_communes_publiant,
  size = ~total_datasets_communes,
  color = ~part_communes_publiant,
  colors = colorRamp(c("lightblue", "darkblue")),
  type = 'scatter',
  mode = 'markers',
  marker = list(
    sizemode = 'diameter',
    opacity = 0.7,
    sizeref = sizeref,
    sizemin = 2 
  ),
  text = ~paste(nom_epci, "<br>Pop totale EPCI:", pop_totale_epci, 
                "<br>Pop communes publiant:", pop_communes_publiant, 
                "<br>Part communes publiant:", round(part_communes_publiant, 2), "%")
) %>%
layout(
    title = "Population des communes publiant par EPCI",
    xaxis = list(
      title = "Population totale EPCI",
      type = "log",
      tickvals = c(100000, 1000000), 
      ticktext = c("100K", "1M") 
    ),
    yaxis = list(
      title = "Population des communes publiant",
      type = "log",
      tickvals = c(100000, 1000000),
      ticktext = c("100K", "1M")
    ),
    legend = list(x = 1, y = 0.5, bgcolor = 'rgba(255,255,255,0)', bordercolor = 'rgba(0,0,0,0)'),
    margin = list(l = 50, r = 50, b = 50, t = 50),
    hovermode = "closest"
)

plot
# Remplacer les NA et -Inf par 0 dans datasets_epci et arrondir les pourcentages
epci_summary <- epci_summary %>%
  mutate(
    datasets_epci = ifelse(is.na(datasets_epci) | is.infinite(datasets_epci), 0, datasets_epci),
    part_communes_publiant = round(part_communes_publiant, 2),
    pop_couverte = round(pop_couverte, 2)
  )

# Filtrer les 100 EPCI les plus peuplés
epci_top_100 <- epci_summary %>%
  arrange(desc(pop_totale_epci)) %>%
  slice_head(n = 100)

# Calculer les valeurs pour la colorisation conditionnelle
median_part_communes_publiant <- median(epci_top_100$part_communes_publiant, na.rm = TRUE)
median_pop_couverte <- median(epci_top_100$pop_couverte, na.rm = TRUE)
mean_datasets_epci <- mean(epci_top_100$datasets_epci, na.rm = TRUE) 

# Fonction personnalisée pour la colorisation conditionnelle avec la moyenne
custom_color_scale_mean <- function(values, mean_val) {
  sapply(values, function(x) {
    if (x >= mean_val * 1.1) {
      "#a8e6a1"  # Vert clair pour les valeurs bien au-dessus de la moyenne
    } else if (x >= mean_val * 0.9 && x < mean_val * 1.1) {
      "#f4f19d"  # Vert/jaune clair autour de la moyenne
    } else if (x >= mean_val * 0.7 && x < mean_val * 0.9) {
      "#f9c89e"  # Orange clair un peu en dessous de la moyenne
    } else {
      "#f8a3a3"  # Rouge clair pour les valeurs bien en dessous de la moyenne
    }
  })
}

# Créer le tableau avec colorisation conditionnelle
epci_top_100 %>%
  kable(format = "html") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE) %>%
  row_spec(0, bold = TRUE) %>%
  column_spec(3, background = custom_color_scale_mean(epci_top_100$datasets_epci, mean_datasets_epci)) %>%
  column_spec(7, background = custom_color_scale_mean(epci_top_100$part_communes_publiant, median_part_communes_publiant)) %>%
  column_spec(8, background = custom_color_scale_mean(epci_top_100$pop_couverte, median_pop_couverte)) %>%
  scroll_box(width = "100%", height = "400px")
libelle_epci nom_epci datasets_epci total_datasets_communes communes_publiant total_communes part_communes_publiant pop_couverte pop_totale_epci pop_communes_publiant
Métropole du Grand Paris Métropole du Grand Paris 0 675 12 81 14.81 51.99 4928173 2561934
Métropole d’Aix-Marseille-Provence Métropole d’Aix-Marseille-Provence 80 86 8 85 9.41 63.55 1792439 1139057
Métropole de Lyon Métropole de Lyon 610 11 3 55 5.45 10.64 1330811 141550
Métropole Européenne de Lille Métropole Européenne de Lille 338 264 13 87 14.94 55.80 1067660 595763
Nantes Métropole Nantes Métropole 212 247 1 19 5.26 53.15 617428 328144
Paris Ouest La Défense Paris Ouest La Défense 0 117 4 10 40.00 49.01 539509 264421
Boucle Nord de Seine Boucle Nord de Seine 0 52 2 8 25.00 40.59 487847 198026
Eurométropole de Strasbourg Eurométropole de Strasbourg 25 1 1 29 3.45 0.74 477517 3512
Bordeaux Métropole Bordeaux Métropole 322 0 0 24 0.00 0.00 455944 0
Grenoble-Alpes-Métropole Grenoble-Alpes-Métropole 0 126 9 45 20.00 65.15 418482 272637
Saint-Etienne Métropole Saint-Etienne Métropole 6 7 2 51 3.92 47.68 402228 191796
Rennes Métropole Rennes Métropole 0 40 1 35 2.86 57.60 397871 229178
Métropole Toulon-Provence-Méditerranée Métropole Toulon-Provence-Méditerranée 0 3 2 9 22.22 52.45 368245 193151
CU Grand Paris Seine et Oise CU Grand Paris Seine et Oise 0 16 3 69 4.35 4.06 362775 14743
Métropole Rouen Normandie Métropole Rouen Normandie 0 6 2 60 3.33 36.04 345447 124502
Vallée Sud - Grand Paris Vallée Sud - Grand Paris 0 2 2 9 22.22 29.27 345245 101059
Grand Paris Seine Ouest Grand Paris Seine Ouest 140 398 8 8 100.00 100.00 321543 321543
Toulouse Métropole Toulouse Métropole 0 1 1 34 2.94 1.56 306883 4786
CA Grand Paris Sud Seine Essonne Sénart CA Grand Paris Sud Seine Essonne Sénart 0 34 2 18 11.11 45.23 294116 133034
CA Roissy Pays de France CA Roissy Pays de France 0 12 3 37 8.11 28.38 293301 83241
CA Communauté Paris-Saclay CA Communauté Paris-Saclay 0 16 1 24 4.17 7.25 286304 20750
CU Le Havre Seine Métropole CU Le Havre Seine Métropole 0 91 2 52 3.85 65.36 267969 175142
CA Val Parisis CA Val Parisis 0 1 1 14 7.14 11.11 262905 29205
CA de Nîmes Métropole CA de Nîmes Métropole 0 1 1 37 2.70 0.92 257004 2355
CA du Pays Basque CA du Pays Basque 0 116 2 149 1.34 18.62 251241 46779
CU Caen la Mer CU Caen la Mer 0 13 1 39 2.56 44.00 250805 110357
Tours Métropole Val de Loire Tours Métropole Val de Loire 0 79 1 18 5.56 56.45 248223 140116
CA Saint Germain Boucles de Seine CA Saint Germain Boucles de Seine 0 2 2 15 13.33 33.78 242011 81752
Metz Métropole Metz Métropole 0 0 0 41 0.00 0.00 225988 0
Métropole Nice Côte d’Azur Métropole Nice Côte d’Azur 0 5 4 48 8.33 31.60 212284 67074
CU Limoges Métropole CU Limoges Métropole 0 1 1 20 5.00 62.77 209926 131770
Brest Métropole Brest Métropole 359 0 0 7 0.00 0.00 209616 0
CA Lorient Agglomération CA Lorient Agglomération 0 31 2 23 8.70 40.04 206925 82847
CA de Béthune-Bruay, Artois-Lys Romane CA de Béthune-Bruay, Artois-Lys Romane 0 0 0 90 0.00 0.00 206365 0
CA de Cergy-Pontoise CA de Cergy-Pontoise 0 5 1 12 8.33 34.37 200109 68778
CA de Lens - Liévin CA de Lens - Liévin 2 8 1 32 3.12 4.16 194783 8107
CA Valenciennes Métropole CA Valenciennes Métropole 0 0 0 34 0.00 0.00 191664 0
Montpellier Méditerranée Métropole Montpellier Méditerranée Métropole 10 1 1 29 3.45 6.75 191084 12890
CA du Grand Annecy CA du Grand Annecy 0 8 1 29 3.45 70.95 189916 134738
CU du Grand Poitiers CU du Grand Poitiers 0 5 2 37 5.41 6.15 189774 11673
CA Valence Romans Agglo CA Valence Romans Agglo 0 1 1 50 2.00 11.11 181049 20120
CA de Sophia Antipolis CA de Sophia Antipolis 8 169 2 23 8.70 51.46 180999 93142
CA Intercommunale du Nord de la Réunion (CINOR) CA Intercommunale du Nord de la Réunion (CINOR) 0 69 1 2 50.00 86.43 180820 156282
CU Grand Besançon Métropole CU Grand Besançon Métropole 1 26 2 55 3.64 67.85 180636 122553
CA Territoire de la Côte Ouest (TCO) CA Territoire de la Côte Ouest (TCO) 0 0 0 3 0.00 0.00 175515 0
CA de La Rochelle CA de La Rochelle 42 230 3 26 11.54 54.79 169803 93030
CA Plaine Vallée CA Plaine Vallée 0 0 0 17 0.00 0.00 164480 0
CA Cannes Pays de Lérins CA Cannes Pays de Lérins 1 139 2 5 40.00 60.16 159274 95818
Orléans Métropole Orléans Métropole 228 0 0 20 0.00 0.00 157101 0
CA Golfe du Morbihan - Vannes Agglomération CA Golfe du Morbihan - Vannes Agglomération 0 13 2 28 7.14 9.33 155742 14524
CA Val d’Yerres Val de Seine CA Val d’Yerres Val de Seine 0 0 0 8 0.00 0.00 154512 0
CA du Centre de la Martinique CA du Centre de la Martinique 0 7 1 4 25.00 49.89 151587 75627
CA du Grand Chambéry CA du Grand Chambéry 46 22 1 37 2.70 43.21 142111 61411
CA Mulhouse Alsace Agglomération CA Mulhouse Alsace Agglomération 0 0 0 33 0.00 0.00 140664 0
CA Paris - Vallée de la Marne CA Paris - Vallée de la Marne 0 23 3 8 37.50 49.44 138718 68579
CA de la Porte du Hainaut CA de la Porte du Hainaut 0 0 0 42 0.00 0.00 138103 0
CU Perpignan Méditerranée Métropole CU Perpignan Méditerranée Métropole 0 0 0 31 0.00 0.00 137390 0
CA du Saint-Quentinois CA du Saint-Quentinois 0 35 2 39 5.13 80.20 135072 108332
CA Versailles Grand Parc (CAVGP) CA Versailles Grand Parc (CAVGP) 0 0 0 15 0.00 0.00 134705 0
CA Chartres Métropole CA Chartres Métropole 0 1 1 60 1.67 0.44 134293 585
CA de Saint-Quentin-en-Yvelines CA de Saint-Quentin-en-Yvelines 45 0 0 7 0.00 0.00 134178 0
CA Alès Agglomération CA Alès Agglomération 0 4 1 69 1.45 2.52 133257 3361
CA du Grand Angoulême CA du Grand Angoulême 0 2 1 35 2.86 7.83 131661 10310
CA Le Grand Narbonne CA Le Grand Narbonne 4 0 0 36 0.00 0.00 131547 0
CA Cœur d’Essonne Agglomération CA Cœur d’Essonne Agglomération 1 0 0 16 0.00 0.00 129832 0
CA Sète Agglopôle Méditerranée CA Sète Agglopôle Méditerranée 0 9 2 13 15.38 15.98 128845 20585
Clermont Auvergne Métropole Clermont Auvergne Métropole 0 0 0 18 0.00 0.00 125553 0
CA Pays de Montbéliard Agglomération CA Pays de Montbéliard Agglomération 0 4 1 65 1.54 21.23 122957 26098
CA Maubeuge Val de Sambre CA Maubeuge Val de Sambre 0 1 1 42 2.38 24.12 121649 29344
CA du Niortais CA du Niortais 0 26 1 36 2.78 50.32 121540 61158
Métropole du Grand Nancy Métropole du Grand Nancy 0 3 1 15 6.67 24.87 119927 29829
CA de la Région Nazairienne et de l’Estuaire (CARENE) CA de la Région Nazairienne et de l’Estuaire (CARENE) 76 0 0 9 0.00 0.00 119802 0
CU Angers Loire Métropole CU Angers Loire Métropole 0 7 4 24 16.67 22.31 118648 26471
CA de Béziers-Méditerranée CA de Béziers-Méditerranée 2 0 0 15 0.00 0.00 118001 0
CA Agglo du Pays de Dreux CA Agglo du Pays de Dreux 0 1 1 81 1.23 26.68 117534 31362
CA de l’Espace Sud de la Martinique CA de l’Espace Sud de la Martinique 0 0 0 12 0.00 0.00 116523 0
CA Le Muretain Agglo CA Le Muretain Agglo 0 0 0 24 0.00 0.00 116166 0
CA Carcassonne Agglo CA Carcassonne Agglo 0 0 0 81 0.00 0.00 114528 0
CA Grand Châtellerault CA Grand Châtellerault 0 2 2 45 4.44 56.96 112318 63978
CA Douaisis Agglo CA Douaisis Agglo 2 2 1 34 2.94 6.56 110026 7222
CA Dracénie Provence Verdon Agglomération CA Dracénie Provence Verdon Agglomération 0 2 1 21 4.76 37.04 109702 40638
CA Intercommunale de la Réunion Est (CIREST) CA Intercommunale de la Réunion Est (CIREST) 0 0 0 4 0.00 0.00 108269 0
CA Evreux Portes de Normandie CA Evreux Portes de Normandie 0 0 0 70 0.00 0.00 102542 0
CA Laval Agglomération CA Laval Agglomération 0 0 0 27 0.00 0.00 102491 0
CA du Pays de Grasse CA du Pays de Grasse 0 0 0 23 0.00 0.00 102366 0
CA d’Hénin-Carvin CA d’Hénin-Carvin 0 0 0 13 0.00 0.00 101369 0
CA du Beauvaisis CA du Beauvaisis 0 4 2 49 4.08 62.24 99130 61702
CA Seine-Eure CA Seine-Eure 0 7 2 56 3.57 24.37 98590 24028
CA du Grand Avignon (COGA) CA du Grand Avignon (COGA) 17 1 1 14 7.14 9.05 98474 8916
CA du Boulonnais CA du Boulonnais 3 0 0 20 0.00 0.00 97686 0
CA Agglomération du Choletais CA Agglomération du Choletais 0 0 0 24 0.00 0.00 97549 0
CA Agglomération d’Agen CA Agglomération d’Agen 0 108 3 42 7.14 49.94 97411 48649
CA Melun Val de Seine CA Melun Val de Seine 0 2 1 16 6.25 20.90 97383 20349
CA du Bassin de Brive CA du Bassin de Brive 0 0 0 45 0.00 0.00 97217 0
CA du Pays Nord Martinique CA du Pays Nord Martinique 0 1 1 18 5.56 15.32 96806 14834
CA Thonon Agglomération CA Thonon Agglomération 10 1 1 25 4.00 39.83 95635 38094
CC Le Grésivaudan CC Le Grésivaudan 0 1 1 38 2.63 3.34 95104 3180
CA du Pays de Gex CA du Pays de Gex 0 1 1 26 3.85 14.09 95038 13391
CU de Dunkerque CU de Dunkerque 0 0 0 14 0.00 0.00 94433 0
CA Quimper Bretagne Occidentale CA Quimper Bretagne Occidentale 2 1 1 11 9.09 70.66 93226 65875